package com.mtiiot.fscore.inter1;

import com.mtiiot.fscore.bean.MetadataInfo;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * fs服务接口版本1.1
 * 操作redis缓存接口类
 * Created by lcy on 16-5-30.
 */
public interface RedisService1 {
    /**
     * 新增或者修改缓存
     * @param metadataInfo 元数据信息
     * @param redisKey
     * @param value
     */
    public boolean saveOrUpdateCache(MetadataInfo metadataInfo, String redisKey, String value) ;

    /**
     * 新增或者修改缓存(可以设置超时时间 单位为s)
     * @param metadataInfo 元数据信息
     * @param redisKey
     * @param value
     * @param timeout
     */
    public boolean saveOrUpdateCache(MetadataInfo metadataInfo, String redisKey, String value, int timeout) ;

    /**
     * 获取缓存
     * @param metadataInfo 元数据信息
     * @param redisKey
     * @return
     */
    public String getCache(MetadataInfo metadataInfo, String redisKey) ;

    /**
     * 获取缓存同时重新设置timeout
     * @param metadataInfo 元数据信息
     * @param redisKey
     * @return
     */
    public String getCacheAndSetTimeout(MetadataInfo metadataInfo, String redisKey, int timeout) ;

    /**
     * 删除缓存
     * @param metadataInfo 元数据信息
     * @param redisKey
     */
    public boolean deleteCache(MetadataInfo metadataInfo, String redisKey);

    /**
     * redis List类型操作
     * @param metadataInfo 元数据信息
     * @param key
     * @param value
     * @return
     */
    public Long lpush(MetadataInfo metadataInfo, String key, String value);

    /**
     *redis List类型操作
     * @param metadataInfo 元数据信息
     * @param key
     * @return
     */
    public Long llen(MetadataInfo metadataInfo, String key);

    /**
     * redis List类型操作
     * @param metadataInfo 元数据信息
     * @param key
     * @param start
     * @param end
     * @return
     */
    public List<String> lrange(MetadataInfo metadataInfo, String key, long start, long end);

    /**
     * redis List类型操作
     * @param metadataInfo 元数据信息
     * @param key
     * @param start
     * @param end
     * @return
     */
    public String ltrim(MetadataInfo metadataInfo, String key, long start, long end);

    /**
     * redis List类型操作
     * @param metadataInfo 元数据信息
     * @param key
     * @param count
     * @param value
     * @return
     */
    public Long lrem(MetadataInfo metadataInfo, String key, long count, String value);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @param field
     * @return
     */
    public String hget(MetadataInfo metadataInfo, String key, String field);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @param field
     * @return
     */
    public Long hdel(MetadataInfo metadataInfo, String key, String... field);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @param field
     * @param value
     * @return
     */
    public Long hincrBy(MetadataInfo metadataInfo, String key, String field, long value);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @return
     */
    public Long hlen(MetadataInfo metadataInfo, String key);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @param field
     * @param value
     * @return
     */
    public Long hset(MetadataInfo metadataInfo, String key, String field, String value);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @param field
     * @param value
     * @return
     */
    public Long hsetnx(MetadataInfo metadataInfo, String key, String field, String value);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @param field
     * @return
     */
    public Boolean hexists(MetadataInfo metadataInfo, String key, String field);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @return
     */
    public Map<String,String> hgetAll(MetadataInfo metadataInfo, String key);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @return
     */
    public Set<String> hkeys(MetadataInfo metadataInfo, String key);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @param fields
     * @return
     */
    public List<String> hmget(MetadataInfo metadataInfo, String key, String... fields);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @return
     */
    public List<String> hvals(MetadataInfo metadataInfo, String key);

    /**
     * redis hash类型操作
     * @param metadataInfo
     * @param key
     * @param hash
     * @return
     */
    public String hmset(MetadataInfo metadataInfo, String key, Map<String, String> hash);
}
